// 1496. 判断路径是否相交
// 思路：我们使用 set 容器来存储 (x, y) 坐标
// 向上/下 y++/-- , 向右/左 x++/--
// 我们在插入前先检测走的位置是否存在 set 中，当 set 中存在了该坐标那么说明是第二次走到该位置了，此时返回true
// 如果是第一次走到该位置，那就插入到 set 中
// 遍历完整个 path 都没相交就返回 false


#include <set>
#include <string>
using namespace std;

class Solution
{
public:
    bool isPathCrossing(string path)
    {
        set<pair<int, int>> hash;
        int x = 0, y = 0;
        hash.insert({x, y});
        for(auto& ch : path)
        {
            if(ch == 'N') y++;
            else if(ch == 'S') y--;
            else if(ch == 'W') x++;
            else x--;
            if(hash.count({x, y})) return true;
            hash.insert({x, y});
        }
        return false;
    }
};